МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
ЗВІТ
До лабораторної роботи №5
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «Метод Ньютона для розв’язування систем нелінійних алгебраїчних рівнянь (СНЛАР)»
Варіант №9
МЕТА РОБОТИ
Ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона.
КОРОСТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Модифікований метод Ньютона.
При використанні стандартного методу Ньютона на кожній ітерації доводиться обчислювати новий якобіан , хоч зрозуміло, що при закінченні ітерацій він повинен прийняти стабільне значення , де –розв'язок. У модифікованому або спрощеному методі Ньютона якобіан заміняють правильно підібраною матрицею А. Звичайно, найкращим, але практично недосяжним варіантом була б заміна , де - розв'язок.
Але на практиці користуються компромісним рішенням:
– вибирають за А якобіан в початковій точці , a ітерації проводять за наступною формулою
– зберігають А протягом певного числа ітерацій;
– на певній r-й ітерації змінюють А, прирівнюючи її якобіану і з новим значенням знову виконують певне число ітерацій і т.д.
Отже, якобіан обчислюється тільки час від часу, за рахунок чого досягається економія машинного часу. Однак, збіжність методу при цьому близька до лінійної.
ЗАВДАННЯ
БЛОК-СХЕМА АЛГОРИТМУ
СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
Main() – головний метод; input() – метод зчитування введених даних;
class Program – клас, який містить тільки головну функцію Main(); class Main – клас, у якому відбуваються усі дії;
Console.ReadLine() та Console.ReadKey() – функція зчитування з клавіатури;
Console.WriteLine() та Console.Write() – функції виведення на екран;
Convert.ToDouble() – функція конвертування у тип Double;
try {} catch (Exception) {} – функція перехоплення винятку;
goto – оператор переходу виконання коду до відповідної мітки; for() – оператор циклі з передумовою; if {} else {} – оператор умови;
ТЕКСТ ПРОГРАМИ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace kmd_lab5
{
class Program
{
static void Main(string[] args)
{
Main p = new Main();
p.input(); p.iterations();
p.output(); p.verify();
Console.Write("\nPress <Enter> to exit..."); Console.ReadKey();
}
}
class Main
{
double[,] A = new double[2, 2]; double[,] A1 = new double[2, 2];
double[] X = new double[2]; double[] X1 = new double[2];
double[] D = new double[2]; double[] F = new double[2];
double det, x1, x2, d, e; int h, n = 0;
public void input()
{
Console.WriteLine(" --- Введiть початковi наближення, похибку та крок:");
for (int i = 0; i < 2; i++)
{
Console.Write(" x{0} = ", i + 1);
X[i] = Convert.ToDouble(Console.ReadLine());
}
Console.Write(" e = "); e = Convert.ToDouble(Console.ReadLine());
Console.Write(" h = "); h = Convert.ToInt32(Console.ReadLine());
}
public void prJakob(double[] J)
{ // якобіан
A[0, 0] = 1.0 - 2 * J[0];
A[0, 1] = -2.0 * J[1];
A[1, 0] = -2.0 * J[1];
A[1, 1] = 1.0 - 2.0 * J[0];
det = A[0, 0] * A[1, 1] - A[0, 1] * A[1, 0];
A1[0, 0] = A[1, 1] / det;
A1[0, 1] = -A[0, 1] / det;
A1[1, 0] = -A[1, 0] / det;
A1[1, 1] = A...